<?php

class FormRegistrar extends TPage {
//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * inicializa algunos controles cuando se carga por primera vez la pagina
   * @param <type> $isPostBack
   * @author VSR, 01/01/2011
   */
  private function inicializaControles($isPostBack){
    try {
      $nombrePagina = $this->obtenerNombrePagina();
      $idUsuario = $this->Request["id"];
      $estado = Utilidades::isNull(Utilidades::obtenerSessionPorNombre("Estado".$nombrePagina), "");
      $cargarDesdePopUp = "0";

      if($estado == "INGRESADO" || $estado == "MODIFICADO" || $estado == "ELIMINADO") {
        $cargarDesdePopUp = "1";
      }

      //agrega atributo a control
      $this->btnRegistrar->Attributes->Add("onclick", "return(validarFormularioUsuarioRegistrar())");
      $this->txtUsername->Attributes->Add("onblur", "comprobarDuplicidadDatoUsuario('0','".$this->txtUsername->ClientID."','".$this->txtExisteUsername->ClientID."','".$this->divExisteUsername->ClientID."','Usuario.Username');");

      //inicializa los controles del Correlativo y Locales
      $this->inicializaControlesEventoWindowOnLoad($isPostBack);

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * inicializa los controles al cargar la pagina
   * @param <type> $isPostBack
   * @author VSR, 01/01/2011
   */
  private function inicializaControlesEventoWindowOnLoad($isPostBack) {
    $nombrePagina = $this->obtenerNombrePagina();
    $estado = Utilidades::isNull(Utilidades::obtenerSessionPorNombre("Estado".$nombrePagina), "");
    $sb = new StringBuilder();

    if($estado == "INGRESADO" || $estado == "MODIFICADO" || $estado == "") {
      $sb->appendLine("setTimeout(\"ocultarElemento('".$this->pnlMensajeUsuario->ClientID."')\", 5000);");
    }
    $this->Page->ClientScript->registerEndScript("windowOnLoad", $sb->toString());
  }

  /**
   * muestra mensaje al usuario
   * @author VSR, 01/01/2011
   */
  private function mostrarMensajeUsuario(){
    try {
      $mensaje = Utilidades::isNull(Utilidades::obtenerSessionPorNombre("msg"),"");
      $baseUrl = $this->Page->Theme->BaseUrl;

      //asigna mensaje al panel
      $this->pnlMensajeUsuario->Visible = true;
      $this->pnlFormulario->Visible = false;
      $this->pnlMensajeExito->Visible = false;
      $this->pnlMensajeError->Visible = false;
      $this->lblEmail->Text = "";

      //dependiendo de la marca especial que tenga el sistema es como se muestra el mensaje al usuario
      if(strpos($mensaje, "{#INGRESADO}") === 0) {
        $mensaje = str_replace("{#INGRESADO}", "", $mensaje);
        //Utilidades::setPanelMensajeUsuarioConBotonCerrar($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_EXITO, $baseUrl);
        $this->lblEmail->Text = $mensaje;
        $this->pnlMensajeExito->Visible = true;
      } elseif (strpos($mensaje, "{#ERROR}") === 0) {
        $mensaje = str_replace("{#ERROR}", "", $mensaje);
        //Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $mensaje, "100%", Utilidades::ESTILO_MENSAJE_ERROR);
        $this->pnlMensajeError->Visible = true;
      } else {
        $this->pnlMensajeUsuario->Visible = false;
        $this->pnlFormulario->Visible = true;
        $this->pnlMensajeExito->Visible = false;
        $this->pnlMensajeError->Visible = false;
      }
      Utilidades::grabarSessionPorNombre("msg", "");
    } catch (Exception $e) {
      $this->pnlMensajeUsuario->Visible = false;
        $this->pnlFormulario->Visible = true;
        $this->pnlMensajeExito->Visible = false;
        $this->pnlMensajeError->Visible = false;
    }
  }

  /**
   * obtiene nombre de la pagina actual
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function obtenerNombrePagina(){
    $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
    return $nombrePagina;
  }

  /**
   * graba los datos del usuario
   * @author VSR, 01/01/2011
   */
  private function grabarUsuario() {
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $status = "";
      $textoMensaje = "";
      $grabadoConExito = true;

      //grabar valores
      $textoMensaje .= $this->grabarDatosUsuario($status, $idUsuario);

      if ($textoMensaje != "") {
        $grabadoConExito = false;
      } else {
        $grabadoConExito = true;
      }

      //muestra mensaje dependiendo si se grabo o no
      if ($grabadoConExito) {
        switch ($status) {
          case "ingresado":
            $textoMensaje = "{#INGRESADO}".$this->txtEmail->Text;
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "INGRESADO");
            break;
          case "error":
            $textoMensaje = "{#ERROR}";
            Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ERROR");
            break;
          default:
            break;
        }
      } else {
        $textoMensaje = "{#ERROR}";
        Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "ERROR");
      }

      Utilidades::grabarSessionPorNombre("msg", $textoMensaje);
      $this->Response->redirect("index.php?page=".$nombrePagina);
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * graba o actualiza el usuario en base de datos
   * @param <type> $status
   * @param <type> $idUsuario
   * @return string
   * @author VSR, 01/01/2011
   */
  private function grabarDatosUsuario(&$status, &$idUsuario) {
    $msgError = "";
    try {
      $username = Utilidades::isNull($this->txtUsername->Text, "");
      $password = Utilidades::isNull($this->txtPassword->Text, "");
      $nombre = Utilidades::isNull($this->txtNombre->Text, "");
      $paterno = Utilidades::isNull($this->txtPaterno->Text, "");
      $materno = Utilidades::isNull($this->txtMaterno->Text, "");
      $email = Utilidades::isNull($this->txtEmail->Text, "");

      //formatea valores
      $password = (Utilidades::isNullOrEmpty($password)) ? "" : md5($password);
      $arr = Usuario::grabarDatosRegistrar($nombre, $paterno, $materno, $username, $password, $email);

      if(is_null($arr)){
        throw new Exception("Error al ejecutar FormRegistrar->grabarDatosUsuario()");
      } else {
        $idUsuario = $arr[0]["IdUsuario"];
        $status = $arr[0]["Status"];
        if ($status == "duplicado") { 
          $idUsuario = "0";
        } else {
          $this->enviarEmailRegistro($idUsuario, $nombre, $paterno, $materno, $email, $username);
        }
      }
    } catch (Exception $e) {
      $msgError = "Se produjo un error interno, no se pudo grabar el usuario.<br/>";
      $idUsuario = ($idUsuario > 0) ? $idUsuario : "0";
      $status = "error";
    }
    return $msgError;
  }

  /**
   * envia email al usuario con 
   * @param <type> $idUsuario 
   */
  private function enviarEmailRegistro($idUsuario, $nombre, $paterno, $materno, $email, $username){
    $listadoMailPara = "";

    try {
      //obtiene el template para dibujar el menu
      $pathBase = Utilidades::obtenerDirectorioBaseAplicacion();
      $template = Utilidades::obtenerContenidoPlantillaHTML($pathBase."template".DIRECTORY_SEPARATOR."AvisoRegistroUsuario.html",true);
      $nombre = $nombre." ".$paterno." ".$materno;

      //construye URL
      $queryString = "{";
      $queryString .= " \"IdUsuario\":\"".$idUsuario."\"";
      $queryString .= ",\"NombreUsuario\":\"".$nombre."\"";
      $queryString .= "}";
      $queryString = Criptografia::encriptarURL($queryString);
      $url = Utilidades::obtenerDirectorioVirtual().$this->Service->constructUrl("Usuario.ViewConfirmarRegistro")."&a=".$queryString;
      $url = "<a href=\"".$url."\">".$url."</a>";

      //reemplaza marcas en el template
      $template = str_replace("{#NOMBRE_USUARIO}", $nombre, $template);
      $template = str_replace("{#EMAIL}", $email, $template);
      $template = str_replace("{#USERNAME}", $username, $template);
      $template = str_replace("{#URL}", $url, $template);

      if(Utilidades::modoDebug()){
        $listadoMailPara = Utilidades::emailPruebas();
      } else {
        $listadoMailPara = $email;
      }

      $msg = Mail::enviar(
              Utilidades::emailHost($this->Application),
              Utilidades::emailUsername($this->Application),
              Utilidades::emailPassword($this->Application),
              Utilidades::emailNombreEmisor($this->Application),
              "Aviso registro de usuario",
              $template,
              true,
              $listadoMailPara);

    } catch (Exception $e) {
      //no hace nada
    }
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function onLoad($param) {
    parent::onLoad($param);
    $nombrePagina = $this->obtenerNombrePagina();

    if(!$this->IsPostBack) {
      $this->inicializaControles($this->IsPostBack);
      $this->mostrarMensajeUsuario();
      Utilidades::grabarSessionPorNombre("Estado".$nombrePagina, "");
    }
  }

  public function btnRegistrarClick($sender, $param){
    $this->grabarUsuario();
  }

//</editor-fold>


}
?>
